フロー記述のオレオレ形式作る


概要

・処理の並列分岐

・処理の合流/待機

・値の受け渡し

をとあるサーバからサーバ群に渡すために、1ラインで書ける記法が欲しかった。

で、探したけど良いのが無かった。


ので、作る話。

パーサの実装はScala。



対象

jar(内部でshellを制御するものもアリ)



記法

A>B,C,D(A:a:c)>E(D:d:e),F(A:a2:f, B:b:f2)<J,K>I(J:j:i)+D>G>H+G>J!Z


Aとかは、JSONで別途記述する、「プロセスオーダー」 いわゆる ジョブ の、

アイデンティティー。

プロセスオーダー Aがあるとき、それはshellとかjarとか通信とか、プロセスidを一つ持つような物事の単位とする。

JSONで表記する。


たとえばパラメータとしてAShell exec -key1 value1 -key2 value2 を受け取るshell AShell.shがあるとき、

{

"A":{

"type":"sh"

"class":"AShell.sh",

"exec":"exec",

"kv":{

"key1":"value1",

"key2":"value2"

}

}

}

解釈は→

AShell.sh exec -key1 value1 -key2 value2


typeがjarだったら、

java -jar Ashell.jar exec  -key1 value1 -key2 value2


この情報を基礎に動作する。

→タイプ一覧は下記


ワンライナーにJSONとして与えれば良い。


ex:

{"A": {"class": "AShell","exec": "exec","kv": {"key1": "value1","key2": "value2"}},"B": {"class": "AShell","exec": "exec","kv": {"key1": "value1","key2": "value2"}},"C": {"class": "AShell","exec": "exec","kv": {"key1": "value1","key2": "value2"}}}


引数として上書きする分だけ、プロセス間渡しとかを行う形。



記述規約:

・> で終了時次プロセスに移行

・(プロセスID:代入元パラメータ:代入先パラメータ) D(A:a:c) で、プロセスオーダーDについて、Aのパラメータaをキーcに代入して実行

・+ で分岐.+Dとあれば、プロセスオーダーDが終了したら開始される並列分岐

・< で特定プロセスの終了待ち。<J,KでプロセスJ、Kの完了待ちを行う

・, で内容のArray化。複数要素の並列稼働

解説:

1.AからB,C,D3つの並列、DでA値aをcパラメータとして使用、すべて終わったらEに収束、 D,Fを並列。D値dをeとして使用、FではA値a2をf、B値bをf2として使用。

完了したらJ、Kの完了が来るまで待機、

Jが着たら実行して処理終了。


2.D完了時、G,Kへとプロセス分離、H完了後終了。


3.G完了後、Jへとプロセス分離、J完了後終了。


4.J,K完了後、Iを実行。J値jをiとして使用。

5.途中で何があっても、プロセスZが最後に実行される(finally節)。


パース順:

! :Filnallyの取得/プロセスオーダー群としてのID配布、コンテキスト生成

+ :並列シーケンスの列挙 -> 各シーケンス化

> :シーケンスの内容分解、列挙 -> プロセス群化

< :プロセス群に対するwaitの解釈 -> プロセス群へのwaitのアタッチ

, :プロセス群のArray化

(:::) :プロセスに対する予約、パラメータのlazy用意 ここが一番大変そう。


こんなもんか。


プロセス自体の詳細は、

・importの記述

・インスタンスの記述

・アイデンティティからexec作って実行コードに配置


ProcessOrderのタイプ一覧

process:Mondogrosso互換のプロセス。com,kissaki.mondogrossoパッケージの継承物で、要はimportが可能。

jar:外部.jarファイル。

sh:外部shellファイル。


値のマトリクスは下記表



プロセス内の話

プロセスIDと、JSONから得た情報

キーとバリューがあるはず

どうやって入力したい?

←できるだけ可変できるように、かつ確認しやすいように

←DBに値で持つ

←ファイルで持つ

その場合、load方法を指定できれば良いのか。

→HTTP系までつくるのめんどうだから、Ver1.0系は、愚直にやろう。コピペで行けるし。